﻿﻿//
// ParallelGrep
//
// Copyright (C) 2011 - Tatsuya Niioka
//
using System.ComponentModel;
using System.IO;
namespace ParallelGrep.Model
{
    /// <summary>
    /// 処理経過情報クラス
    /// </summary>
    public class ProgressInfo : INotifyPropertyChanged
    {
        #region FileName
        private string m_fileName;
        /// <summary>
        /// ファイル名を取得または設定します。
        /// </summary>
        public string FileName
        {
            get
            {
                return m_fileName;
            }
            set
            {
                if (m_fileName == value)
                {
                    return;
                }
                m_fileName = value;
                OnPropertyChanged("FileName");
            }
        }
        #endregion

        #region Path
        private string m_path;
        /// <summary>
        /// ファイルパスを取得または設定します。
        /// </summary>
        public string Path
        {
            get
            {
                return m_path;
            }
            set
            {
                if (m_path == value)
                {
                    return;
                }
                m_path = value;
                OnPropertyChanged("Path");
            }
        }
        #endregion

        #region FullName
        private string m_fullName = null;
        /// <summary>
        /// 完全ファイル名を取得します。
        /// </summary>
        public string FullName
        {
            get
            {
                if (m_fullName == null)
                {
                    m_fullName = System.IO.Path.Combine(this.Path, this.FileName);
                }
                return m_fullName;
            }
        }
        #endregion

        #region ColumnIndex
        private int m_columnIndex;
        /// <summary>
        /// カラム位置を取得または設定します。
        /// </summary>
        public int ColumnIndex
        {
            get
            {
                return m_columnIndex;
            }
            set
            {
                if (m_columnIndex == value)
                {
                    return;
                }
                m_columnIndex = value;
                OnPropertyChanged("ColumnIndex");
            }
        }
        #endregion

        #region LineNumber
        private int m_lineNumber;
        /// <summary>
        /// 行番号を取得または設定します。
        /// </summary>
        public int LineNumber
        {
            get
            {
                return m_lineNumber;
            }
            set
            {
                if (m_lineNumber == value)
                {
                    return;
                }
                m_lineNumber = value;
                OnPropertyChanged("LineNumber");
            }
        }
        #endregion

        #region Text
        private string m_text;
        /// <summary>
        /// テキストを取得または設定します。
        /// </summary>
        public string Text
        {
            get
            {
                return m_text;
            }
            set
            {
                if (m_text == value)
                {
                    return;
                }
                m_text = value;
                OnPropertyChanged("Text");
            }
        }
        #endregion

        #region Size
        private long m_size;
        /// <summary>
        /// サイズを取得または設定します。
        /// </summary>
        public long Size
        {
            get { return m_size; }
            set { m_size = value; }
        }
        #endregion

        #region Encoding
        private string m_encoding;
        /// <summary>
        /// エンコーディング名を取得または設定します。
        /// </summary>
        public string Encoding
        {
            get { return m_encoding; }
            set { m_encoding = value; }
        }
        #endregion

        #region INotifyPropertyChanged
        /// <summary>
        /// プロパティ変更イベント
        /// </summary>
        public event PropertyChangedEventHandler PropertyChanged;
        /// <summary>
        /// 指定したプロパティでプロパティを変更します。
        /// </summary>
        /// <param name="propertyName">プロパティ名</param>
        protected void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        #endregion

    }
}

